#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdbool.h>


//文件重定向
int main()
{

    //dup2()
    int fd = open("log.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
    if(fd < 0) exit(1);
    dup2(fd,1);


    //close(1);
    //int fd = open("log.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
    //if(fd < 0) exit(1);
    printf("fd = %d\n",fd);
    printf("hello world\n");

    return 0;
}

//文件描述符fd
//int main()
//{
//    printf("stdin: %d\n",stdin->_fileno);
//    printf("stdout: %d\n",stdout->_fileno);
//    printf("stderr: %d\n",stderr->_fileno);
//
//
//    umask(0002);
//    int fd1 = open("log1.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
//    int fd2 = open("log2.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
//    int fd3 = open("log3.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
//    int fd4 = open("log4.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
//    if(fd1 < 0)exit(1);
//    if(fd1 < 0)exit(2);
//    if(fd1 < 0)exit(3);
//    if(fd1 < 0)exit(4);
//
//    printf("%d\n",fd1);
//    printf("%d\n",fd2);
//    printf("%d\n",fd3);
//    printf("%d\n",fd4);
//
//    return 0;
//}
//read 读文件
//int main()
//{
//    int fd = open("log.txt",O_RDONLY);
//    
//    int cnt = 0;
//    while(true)
//    {
//        char buffer[64];
//        int n = read(fd,buffer,sizeof(buffer)-1);
//        cnt++;
//        //printf("%d : %d\n",n);
//        if(n > 0)
//        {
//            buffer[n] = '\0';
//            printf("%s",buffer);
//        }
//        if(cnt > 5)
//            break;
//    }
//    
//    close(fd);
//    return 0;
//}



//open()系统调用的使用
//int main()
//{
//    umask(0);
//
//    int f = open("log.txt",O_CREAT | O_WRONLY | O_TRUNC,0666);
//    if(f < 0)
//    {
//        perror("open");
//        return 1;
//    }
//
//    const char* msg = "1234\n";
//    int cnt = 1;
//    int a = 1234;
//    while(cnt)
//    {
//        //write(f,msg,strlen(msg));
//        //二进制写入
//        //write(f,&a,sizeof(a));
//        char buff[16];
//        snprintf(buff,sizeof(buff),"%d",a);
//        write(f,buff,strlen(buff));
//        cnt--;
//    }
//    close(f);
//
//    return 0;
//}
//打印信息到显示器上
//int main()
//{
//    printf("hello world\n");
//
//    fprintf(stdout,"hello fprintf\n");
//
//    const char *msg = "hello fwrite\n";
//    fwrite(msg,strlen(msg),1,stdout);
//
//    return 0;
//}

// cat 命令
//int main(int argc, char *argv[])
//{
//    if(argc != 2)
//    {
//        printf("Usage: %s filename\n",argv[0]);
//        return 1;
//    }
//    FILE* fp = fopen(argv[1],"r");
//    if(NULL == fp)
//    {
//        perror("fopen");
//        return 2;
//    }
//    
//    while(1)
//    {
//        char buffer[128];
//        memset(buffer,0,sizeof(buffer));
//        int n = fread(buffer,1,sizeof(buffer)-1,fp);
//        if(n > 0)
//        {
//            buffer[n] = 0;
//            printf("%s",buffer);
//
//        }
//        if(feof(fp))
//            break;
//    }
//    fclose(fp);
//    return 0;
//}

//int main()
//{
//    FILE* pf = fopen("long.txt","w");
//    if(pf == NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//    
//    const char *msg = "hello bit: ";
//    int cnt = 1;
//    while(cnt <= 10)
//    {
//        char buffer[1024];
//        snprintf(buffer,sizeof(buffer),"%s%d\n",msg,cnt++);
//        fwrite(buffer,strlen(buffer),1,pf);
//    }
//    fclose(pf);
//    pf = NULL;
//    return 0;
//}
